利用ajax长轮询、短轮询实现消息实时更新 您所在的位置:网站首页 js请求数据 长连接 利用ajax长轮询、短轮询实现消息实时更新

利用ajax长轮询、短轮询实现消息实时更新

2024-06-18 02:06| 来源: 网络整理| 查看: 265

前言

    实现消息实时更新常见的三种方式是:短轮询、长轮询和websocket。短轮询、长轮询是http轮询机制,利用浏览器持续发送请求,服务器将最新的数据响应请求,本质还是http协议的request-response模式。websocket利用了http协议完成一部分握手过程,首先发起http请求,在请求头中加入升级为websocket的必要参数,服务器收到请求便不再走http协议,而是创建并保持一个websocket连接,返回确认信息给浏览器。

    简单来说,轮询是浏览器主动请求最新数据,websocket是服务器主动推送最新数据。

    http请求中,最常用的是ajax异步请求,所以ajax轮询实际上就是http轮询,只是请求的方法指定为ajax。

    实现消息实时更新还有一种方式:Comet,一般有两种实现方式:http长轮询、基于 Iframe 及 htmlfile 的流方式。流方式实际是利用iframe创建一个隐藏的src组件,使用http长连接的方式。

    http2.0中有一个服务器推送的概念,与上述实现comet的流方式概念不同。http2.0的服务器推送简单来说可以为:一次请求多次响应。举个栗子,用户请求一个html页面时,在http1.x版本,流程将是:请求html—返回html—请求css—返回css—请求js—返回js…,也就是一个html页面会有多次请求多次响应。而http2.0使用服务器推送时,流程将可以是:请求html—返回html—返回css—返回js…节省了多次请求的资源和时间。

一、http长连接和短连接

    HTTP长连接(long connection)与短连接(short connection)本质上是TCP长连接和短连接。短连接是最常见的连接类型,在完成一次HTTP请求和响应后马上断开TCP连接,下次请求将重建一个新的TCP连接。而长连接则指请求响应后不立刻断开TCP连接,下次请求将复用该TCP连接,直至超时断开。HTTP/1.0默认短连接,HTTP/1.1起默认长连接,长连接通过在请求头设置Connection: keep-alive启用、通过Keep-Alive: timeout=20设置长连接的超时时间(秒)。

相同点 不同点 HTTP长连接 都是基于TCP连接,并无本质不同;由HTTP请求头Connection: keep-alive控制是否长/短连接。 1、使用次数:重用多次;2、关闭时机:超时后才关闭该TCP连接,由Keep-Alive: timeout=20控制超时时间(秒)。 HTTP短连接 1、使用次数:仅使用一次;2、关闭时机:一次HTTP请求响应后立即关闭该TCP连接。 二、http长轮询和短轮询

    http长轮询(long polling):服务端收到请求后若有数据立即返回,若无数据则保持到有数据或一段时间后超时,浏览器收到响应后立即重新发送相同的请求;

    http短轮询(short polling):服务端收到请求后无论是否有数据都立即返回,浏览器收到响应后间隔一段时间后重新发送相同的请求。

    http长轮询/短轮询和http长连接/短连接没有必然关系。长轮询未必要使用长连接,使用了长连接也未必是使用长轮询。

相同点 不同点 HTTP长轮询 都是基于HTTP连接,都将重复发送相同请求。 1、请求发送频率:浏览器端收到HTTP响应后立即重复发起相同HTTP请求;2、服务器端处理机制:有数据时立即响应,无数据时等待数据或直到超时;3、特点:获取数据比较实时,服务器端需要较多资源以维持众多长轮询。 HTTP短轮询 1、请求发送频率:浏览器端收到HTTP响应后间隔一段自定义时间后重复发起相同HTTP请求;2、服务器端处理机制:无论是否有数据都立即响应;3、特点:获取数据不实时,通过浏览器端脚本即可实现。

在这里插入图片描述

三、长轮询、短轮询和websocket优缺点的简单对比 短轮询:

    优点:实现简单,浏览器使用循环不断地、间隔地发送请求获取数据即可。

    缺点:频繁创建/断开连接,每次请求都会查询一遍数据不管有无都返回,对服务器业务处理的性能有很大的需求和压力;因为请求间有间隔时间,获取的数据是伪实时的,不适应对实时性要求很高的项目。

长轮询:

    优点:有数据/超时才会响应,收到响应后马上发送请求,相比短轮询减少连接的创建/断开,获取的数据实时性更强(间隔时间只是一个RTT,一般不会很长)。

    缺点:对服务器的并发处理性能有很大的需求和压力;由于在返回数据前可能会有一定的等待时间,那么需要维持着一个空闲的tcp连接。

轮询都有共同的缺点:占用很多资源,并发量一多起来容易崩;其次必须由浏览器主动去请求,服务器不会主动告知最新数据。

websocket:

    优点:只要建立websocket连接,服务器主动推送最新的数据,不需要浏览器发送请求(其实还是要发请求建立连接,不过只需一次);实时性最优越;创建连接所耗费的资源相对较少,因为一次请求就维持连接,不用频繁解析http请求。

    缺点:利用到tcp长连接,为维持长连接所耗费的资源也同样不少,且连接的利用率实际上也是不高的;

    难点:断线重连问题,如何保证每次数据只会推一遍而不会重复推送;单生产多消费问题(多页面重开问题),一次数据怎么推送给多个用户,如果每个页面都创建一个websocket,那么资源耗费太多;

四、利用ajax实现长轮询和短轮询 4.1 简单实现 前端测试页面


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有